package com.awccis.admin.controller;

import com.awccis.admin.model.worder.WastageOrderBean;
import com.awccis.admin.model.worder.WastageOrderViewBean;
import com.awccis.admin.service.impl.AdminWastageOrderServiceImpl;
import com.awccis.common.utils.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @author: txp
 * @date: 2018/8/1 on 下午9:37
 * @since: 1.0
 * @description:
 */
@Controller
@RequestMapping("/set/wastageOrder")
public class AdminWastageOrderController {

    /**
     * 日志打印对象
     */
    private Logger logger = LoggerFactory.getLogger(AdminWastageOrderController.class);

    @Resource
    private AdminWastageOrderServiceImpl adminWastageOrderService;


    /**
     * 记录没有获取司机的流失订单
     *
     * @param wastageOrderBean 流失订单
     * @return map
     */
    @RequestMapping(value = "/recordNoDriverWastageOrders", produces = Constants.REQUEST_PRODUCES)
    public @ResponseBody
    Map<String, Object> recordNoDriverWastageOrders(@RequestBody WastageOrderBean wastageOrderBean) {
        logger.info("记录流失订单信息：" + wastageOrderBean.toString() + "请求类型：" + wastageOrderBean.getWastageHasDriver());
        System.out.println("记录流失订单信息：" + wastageOrderBean.toString() + "请求类型：" + wastageOrderBean.getWastageHasDriver());

        Map<String, Object> map = new HashMap<>();
        if (wastageOrderBean != null) {
            int type = wastageOrderBean.getWastageHasDriver();
            switch (type){
                case 1:
                    boolean result1 = adminWastageOrderService.addWastageOrders(false, wastageOrderBean);
                    map.put(Constants.MAP_KEY_RESULT, result1);
                    if (result1){
                        map.put(Constants.MAP_KEY_MESSAGE, "添加未获取司机的流失订单信息成功！");
                    }else {
                        map.put(Constants.MAP_KEY_MESSAGE, "添加未获取司机的流失订单信息失败！");
                    }
                    break;
                case 0:
                    boolean result2 = adminWastageOrderService.addWastageOrders(true, wastageOrderBean);
                    map.put(Constants.MAP_KEY_RESULT, result2);
                    if (result2){
                        map.put(Constants.MAP_KEY_MESSAGE, "添加已获取司机的流失订单信息成功！");
                    }else {
                        map.put(Constants.MAP_KEY_MESSAGE, "添加已获取司机的流失订单信息失败！");
                    }
                    break;
                default:
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "请求类型非法！");
                    break;
            }
        } else {
            map.put(Constants.MAP_KEY_RESULT, false);
            map.put(Constants.MAP_KEY_MESSAGE, "流失订单信息非法为空！");
        }
        return map;
    }


    /**
     * 查询流失订单
     *
     * @param hashMap {"type":"all", "value":""}
     * @return map
     */
    @RequestMapping(value = "/selectWastageOrders", produces = Constants.REQUEST_PRODUCES)
    public @ResponseBody
    Map<String, Object> selectWastageOrders(@RequestBody HashMap<String, String> hashMap) {
        logger.info("查询流失订单：" + hashMap);
        System.out.println("查询流失订单：" + hashMap);

        Map<String, Object> map = new HashMap<>();

        String type = hashMap.get("type");
        String value = hashMap.get("value");

        List<WastageOrderViewBean> list;

        if (type == null || "".equals(type)) {
            map.put(Constants.MAP_KEY_RESULT, false);
            map.put(Constants.MAP_KEY_MESSAGE, "非法请求type参数！");
            return map;
        }
        if (value == null || "".equals(value)) {
            map.put(Constants.MAP_KEY_RESULT, false);
            map.put(Constants.MAP_KEY_MESSAGE, "非法请求value参数！");
            return map;
        }

        switch (type) {
            case "all":
                list = adminWastageOrderService.queryWastageOrders();
                if (list.size() > 0) {
                    map.put(Constants.MAP_KEY_RESULT, true);
                    map.put(Constants.MAP_KEY_MESSAGE, list);
                } else {
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "当前查询所有流失订单为空！");
                }
                break;
            case "today":
                list = adminWastageOrderService.queryToadyWastageOrders();
                if (list.size() > 0) {
                    map.put(Constants.MAP_KEY_RESULT, true);
                    map.put(Constants.MAP_KEY_MESSAGE, list);
                } else {
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "查询当天所有流失订单为空！");
                }
                break;
            case "customer":
                try {
                    list = adminWastageOrderService.queryWastageOrdersByCustomerId(Integer.parseInt(value));
                } catch (NumberFormatException e) {
                    logger.warn("解析乘客customerID失败！原：" + value);
                    System.out.println("解析乘客customerID失败！原：" + value);
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "解析乘客" + value + "失败！");
                    return map;
                }
                if (list.size() > 0) {
                    map.put(Constants.MAP_KEY_RESULT, true);
                    map.put(Constants.MAP_KEY_MESSAGE, list);
                } else {
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "查询" + value + "乘客所有流失订单为空！");
                }
                break;
            case "driver":
                try {
                    list = adminWastageOrderService.queryWastageOrdersByDriverId(Integer.parseInt(value));
                } catch (NumberFormatException e) {
                    logger.warn("解析司机driverID失败！原：" + value);
                    System.out.println("解析司机driverID失败！原：" + value);
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "解析司机" + value + "失败！");
                    return map;
                }
                if (list.size() > 0) {
                    map.put(Constants.MAP_KEY_RESULT, true);
                    map.put(Constants.MAP_KEY_MESSAGE, list);
                } else {
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "查询" + value + "司机所有流失订单为空！");
                }
                break;
            case "time":
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                try {
                    list = adminWastageOrderService.queryWastageOrdersByTime(sdf.parse(value));
                } catch (ParseException e) {
                    logger.warn("解析指定时间的已获取司机的流失订单的日期出错："+value);
                    System.out.println("解析指定时间的已获取司机的流失订单的日期出错："+value);
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "解析指定时间的已获取司机的流失订单的日期出错："+value);
                    return map;
                }
                if (list.size() > 0) {
                    map.put(Constants.MAP_KEY_RESULT, true);
                    map.put(Constants.MAP_KEY_MESSAGE, list);
                } else {
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "查询指定时间的" + value + "的已获取司机的所有流失订单为空！");
                }
                break;
            default:
                map.put(Constants.MAP_KEY_RESULT, false);
                map.put(Constants.MAP_KEY_MESSAGE, "请求参数非法！");
                break;
        }

        return map;
    }

    /**
     * 查询获取还未获取司机的流失订单的信息
     * @param hashMap {"type":"today", "value":"0"}
     * @return map
     */
    @RequestMapping(value = "/selectNoDriverWastageOrders", produces = Constants.REQUEST_PRODUCES)
    public @ResponseBody Map<String, Object> selectNoDriverWastageOrders(@RequestBody HashMap<String, String> hashMap){
        logger.info("查询还未获取司机的流失订单信息：" + hashMap);
        System.out.println("查询还未获取司机的流失订单信息：" + hashMap);

        Map<String, Object> map = new HashMap<>();

        String type = hashMap.get("type");
        String value = hashMap.get("value");

        List<WastageOrderViewBean> list;

        if (type == null || "".equals(type)) {
            map.put(Constants.MAP_KEY_RESULT, false);
            map.put(Constants.MAP_KEY_MESSAGE, "非法请求type参数！");
            return map;
        }
        if (value == null || "".equals(value)) {
            map.put(Constants.MAP_KEY_RESULT, false);
            map.put(Constants.MAP_KEY_MESSAGE, "非法请求value参数！");
            return map;
        }

        switch (type){
            case "all":
                list = adminWastageOrderService.queryNoDriverWastageOrders("all", 0, null);
                if (list.size() > 0) {
                    map.put(Constants.MAP_KEY_RESULT, true);
                    map.put(Constants.MAP_KEY_MESSAGE, list);
                } else {
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "查询还未获取司机的所有流失订单为空！");
                }
                break;
            case "today":
                list = adminWastageOrderService.queryNoDriverWastageOrders("today", 0, null);
                if (list.size() > 0) {
                    map.put(Constants.MAP_KEY_RESULT, true);
                    map.put(Constants.MAP_KEY_MESSAGE, list);
                } else {
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "查询当天还未获取司机的所有流失订单为空！");
                }
                break;
            case "customer":
                try {
                    list = adminWastageOrderService.queryNoDriverWastageOrders("customer", Integer.parseInt(value), null);
                } catch (NumberFormatException e) {
                    logger.warn("获取未获取司机的流失订单解析乘客customerID失败！原：" + value);
                    System.out.println("获取未获取司机的流失订单解析乘客customerID失败！原：" + value);
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "获取未获取司机的流失订单解析乘客" + value + "失败！");
                    return map;
                }
                if (list.size() > 0) {
                    map.put(Constants.MAP_KEY_RESULT, true);
                    map.put(Constants.MAP_KEY_MESSAGE, list);
                } else {
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "查询" + value + "乘客的未获取司机的所有流失订单为空！");
                }
                break;
            case "time":
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                try {
                    list = adminWastageOrderService.queryNoDriverWastageOrders("time", 0, sdf.parse(value));
                } catch (ParseException e) {
                    logger.warn("解析指定时间的未获取司机的流失订单的日期出错："+value);
                    System.out.println("解析指定时间的未获取司机的流失订单的日期出错："+value);
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "解析指定时间的未获取司机的流失订单的日期出错："+value);
                    return map;
                }
                if (list.size() > 0) {
                    map.put(Constants.MAP_KEY_RESULT, true);
                    map.put(Constants.MAP_KEY_MESSAGE, list);
                } else {
                    map.put(Constants.MAP_KEY_RESULT, false);
                    map.put(Constants.MAP_KEY_MESSAGE, "查询指定时间的" + value + "的未获取司机的所有流失订单为空！");
                }
                break;
            default:
                map.put(Constants.MAP_KEY_RESULT, false);
                map.put(Constants.MAP_KEY_MESSAGE, "请求参数非法！");
                break;
        }

        return map;
    }
}
